Buscar

Lista de Sistemas Operacionais SSC5723-2020

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 26 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 26 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 26 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Lista de Sistemas Operacionais 
SSC5723-2020 
 
Legenda 
● Incompleto 
 
 
Questões 
 
● Quais as diferenças e semelhanças entre os sistemas operacionais da década de 60 e os 
da década atual? 
 
Os sistemas da década de 60 já possuíam alguns conceitos utilizados até os dias de hoje (e.g. Multiprogramação, 
Spooling e Time Sharing). Apesar destes conceitos terem surgido nessa época, cada sistema operacional era 
implementado para um hardware específico, não existindo um SO de propósito geral. O SO de propósito geral, 
semelhante aos que temos hoje, só seria inventado na década de 60. Assim, as principais semelhanças são os 
conceitos aplicados ao SO, e as principal diferença é a aplicação desses conceitos para somente alguns tipos de 
hardware. 
 
● No contexto dos sistemas operacionais atuais, quais os principais dispositivos de entrada 
e saída presentes em diversos hardwares (desktops, notebooks, celulares) que tais 
sistemas precisam controlar? 
 
Desktops e notebooks: Os principais dispositivos I/O são os monitores, teclados, mouses ou touchpads, 
impressoras USB, discos rígidos e, em alguns casos, SSDs. Além disso, é frequente o uso de memórias flash com 
entrada USB (pendrives), controladores de rede (Cabeada e Wireless) e controladores de comunicação bluetooth. 
 
Smartphones e celulares: No caso de dispositivos móveis, os principais dispositivos I/O são as telas de toque, 
controladores de rede e comunicação wireless (tais como controladores de rede wireless e bluetooth) e, mais 
recentemente controladores de NFC. 
 
● Considerando o escopo da aula 01, qual a razão e a importância dos sistemas 
operacionais no nosso cotidiano? 
 
Sem os sistemas operacionais toda a abstração da comunicação entre hardware e software de usuário teria que 
ser implementada manualmente. Isso implica que o custo de desenvolvimento para os programadores seria muito 
alto, dado que muitas instruções de hardware são complexas e variáveis com dependência do tipo de dispositivo 
ou fabricante. Deste modo, a abstração de controle de hardware pelo SO possibilita um aumento de velocidade no 
desenvolvimento de aplicações para usuários. Por fim, SOs de propósito geral tornaram ainda mais intuitivo o uso 
de computadores, impulsionando seu uso nos anos 70 e 80, com a introdução dos computadores pessoais. 
 
● Descreva a arquitetura de um sistema operacional e destaque as principais características 
de cada uma das camadas existentes. 
 
Sistema operacional monolítico 
● Um SO monolítico possui uma arquitetura onde o SO inteiro trabalha no espaço de kernel. 
● Cada componente do SO está contido no kernel e pode se comunicar diretamente com os demais (i.e. 
simplesmente utilizando chamadas de função). O kernel tipicamente executa seus processos sem 
restrições de acesso ao sistema. 
● Exemplos: OS/360, VMS e LINUX 
Sistema operacional em camadas 
● Conforme os SOs ficaram maiores e mais complexos, projetos puramente monolíticos se tornaram 
inviáveis. A proposta de SOs em camadas tenta resolver esse problema agrupando em camadas os 
componentes que desempenham funções similares. 
● Cada camada se comunica exclusivamente com aquelas imediatamente acima e abaixo da mesma. 
● As camadas mais baixas provém serviços para as camadas mais altas utiizando uma interface que 
abstrai sua implementação. 
● Exemplos: O THE é um dos primeiros SOs baseados em camadas. Tanto o Windows XP quanto o 
Linux também utilizam em algum nível o sistema de camadas. 
Sistema operacional de micro kernel 
● A maioria dos componentes de um SO micro kernel, tais como gerencialmento de processos, rede, 
interação com sistema de arquivos e gerenciamento de dispositivos, são executados fora do kernel 
com um nível de previlégios menor. 
● Microkernels são altamente modulares, tornando-os extensíveis, portáveis e escaláveis. 
Adicionalmente, por conta do microkernel não se apoiar na execução individual de cada componente, 
um ou mais componentes podem falhar sem causar falha no SO. 
● Exemplos: Ambos Linux e Windows possuem componentes modulares. 
Sistemas operacionais de redes e Sistemas operacionais distribuídos 
● Um sistema operacional de rede possibilita que seus processos acessem recursos (e.g. arquivos) que 
residem em outros computadores independentes em uma rede. 
● A estrutura de muitos SOs de rede e SOs distribuídos é geralmente baseada no modelo 
cliente-servidor. 
● Os computadores clientes em uma rede abrem requisições de recursos (e.g. arquivos e tempo de 
processamento) por meio de um protocólo de rede apropriado. O servidor responde com os recursos 
apropriados. 
● Um SO distribuído é um sistema único que gerencia recursos em mais de um computador, ao mesmo 
tempo. 
● Exemplos: O SO Chord do MIT e o Amoeba da Vrije Universiteit (VU - Amsterdam). 
 
● Do que se trata uma instrução TRAP no contexto de system calls? Qual a relação entre 
essa instrução, chamadas de funções por bibliotecas em C e kernel do sistema 
operacional? 
 
O TRAP é uma instrução especial do processador que indica a necessidade de um programa de usuário de 
acessar alguma funcionalidade somente permitida para os programas de kernel. Deste modo o programa pode 
executar códigos que habilitam a manipulação de recursos críticos do sistema, tais como periféricos, 
gerenciamento de memória e de hardware. 
 
Para executar esse programa, o processador interrompe a execução do programa atual, salva o estado e invoca a 
kernel com a informação da TRAP. Após a execução do método após a TRAP, o processador volta para o estado 
salvo e continua a execução do programa interrompido. Um exemplo deste fluxo em C pode ser observado na 
TRAP da chamada da função kernel sys_sbrk(), que é invocada por meio da chamada de sistema sbrk(). 
 
 
● Qual a importância das chamadas de sistemas parra os sistemas operacionais? Dê 
exemplos de pelo menos 3 chamadas de sistemas que são utilizadas no sistema 
operacional Linux. Explique seu funcionamento. 
 
As chamadas de sistema são um modo de os programas de usuário utilizarem alguns serviços do sistema 
operacional. Por exemplo, as funções read e write de um arquivo podem requerer o acesso a dispositivos de E/S. 
Essas funções são apenas interfaces limpas e claras para utilização do usuário, quando na realidade em 
background são executadas pela kernel do SO após a mudança de modo (TRAP). Os tipos de chamadas de 
sistema e a quantidade necessária para cada programa de usuário pode crescer muito, ressaltando a importância 
da sua existência nos Sistemas Operacionais. Três exemplos de chamadas de sistema no Linux são: 
 
exec: executa um novo programa 
fork: cria um novo processo (processo atual é clonado) 
nmap: mapeia um arquivo para um endereço de memória respectivo a um processo 
 
 
● Como é o funcionamento das chamadas de sistemas em modo usuário? E em modo 
núcleo? 
 
Em modo usuário, o acesso a memória é limitado para somente alguns endereços, e acessos aos dispositivos 
periféricos são bloqueados. Os programas em modo usuário não são prioritários em suas execuções, uma vez que 
a CPU pode ser utilizada por outros programas mais prioritários a qualquer momento (e.g. programas em modo 
kernel). 
Por outro lado, em modo kernel a CPU possui as instruções de gerenciamento de memória bem como todos os 
endereços, além de ter acesso aos dispositivos periféricos, tais como discos e placas de rede. A CPU também 
pode executar programas em sequência sem interrupção. 
 
 
● O que é, e para que serve o Kernel? 
 
O kernel é a parte central de qualquer Sistema Operacional. O kernel geralmente lida com diversas 
funcionalidades, desde gerenciamento de memória e de dispositivos de E/S, até agendamento de tarefas da CPU 
e gerenciamento de tráfego de rede. De modo simplificado, o kernel é constituído de: 
 
● Gerenciador de memória. 
● Scheduler de processos e de CPU. 
● Drivers dos dispositivos. 
● Sistema de arquivos 
● Application Programming Interface (API): as funçõesbásicas que podem ser acessadas pelos 
programas de usuário. 
 
● [OBJETIVA] Dentre as principais características dos sistemas operacionais, destacam-se: 
 
As duas principais funções dos sistemas operacionais é realizar o gerenciamento de recursos e também 
prover uma interface padronizada para a utilização por parte dos usuários. 
 
● O que você entende por máquinas virtuais? 
 
As máquinas virtuais abstraem o hardware de um sistema (e.g. CPU, disco, memória) em vários ambientes 
distintos. Essa abstração permite que cada ambiente execute seus programas como um computador único e 
físico. 
 
Vantagens: 
1. Não existem problemas relacionados a acessos indevidos ou proteção, uma vez que cada máquina 
virtual em execução é independente. 
2. As VMs podem oferecer um conjunto de instruções que se difere de computadores reais (e.g. JVM). 
3. Geralmente as VMs possuem fácil manutenção, disponibilidade e facilidade na recuperação de dados. 
4. Easy maintenance, availability and convenient recovery. 
Desvantagens: 
1. Quando um PC roda diversas VMs e chega próximo ao limite de seus recursos, algumas máquinas 
virtuais podem sofrer perdas de desempenho. 
2. O acesso ao hardware das VMs não é tão eficiente quanto ao acesso direto do SO do host. 
 
Exemplo de uso: CMS (Conversational Monitor System) no IBM VM/370. 
 
● [OBJETIVA] Com relação a tipos de sistemas operacionais, utilização de recursos e forma 
como esses tipos são estruturados, assinale a opção correta. 
 
No sistema operacional do tipo monolítico, uma coleção de rotinas pode chamar qualquer outra rotina, uma 
vez que cada uma delas possui interface definida. 
 
● Descreva as principais características dos sistemas do tipo cliente/servidor. 
 
Os SOs Cliente/Servidor são variações dos sistemas microkernel. A principal diferença está na organização dos 
processos em duas classes: (i) servidores, os quais fornecem algum serviço; (ii) os clientes que utilizam estes 
serviços. 
 
A comunicação entre clientes e servidores é feita via mensageria. Para obter um serviço, o processo cliente envia 
uma mensagem com a descrição dos recursos necessários. O servidor analisa essa mensagem, executa o serviço 
e retorna uma resposta. Isso possibilita que clientes e servidores sejam executados em computadores distintos, 
conectados localmente ou em rede. Assim, o modelo de sistema cliente/servidor é uma abstração que pode ser 
utilizada para máquinas únicas ou uma rede de máquinas. 
 
 
 
● Explique por que a tarefa do escalonador de processos é importante para o desempenho 
da CPU. 
 
O desempenho da CPU está intimamente ligado com o modo pelo qual os processos são chaveados. O 
escalonador de processos é o componente responsável pela gestão dessa escala de chaveamento. Essa escala, 
por sua vez, pode ter a prioridade de seus processos ajustada a partir de um conjunto de variáveis, e.g., quantum 
de tempo que um processo precisa para ser executado e finalizado, prioridade associada a algum processo, se é 
CPU ou I/O bound, dentre outras. Por fim, sem uma boa definição de algoritmo de escalonamento para uma dada 
aplicação, alguns processos com um grande quanta pode nunca ser executado em um algoritmo baseado em 
prioridade por tempo. Enquanto isso, algoritmos de escalonamento de múltiplas filas podem tornar o uso de CPU 
mais equilibrado. 
 
● Defina e diferencie: programa, processo e thread. 
 
Programa: O programa é um arquivo executável, consistido de um conjunto de instruções e geralmente guardados 
em dispositivos de armazenamento.O programa é um arquivo executável, consistido de um conjunto de instruções 
e geralmente guardados em dispositivos de armazenamento. 
 
Processo: Um processo é a execução de um programa. Um processo pode possuir atributos, tais como: 
● Número do Processo; 
● Seções de memória (e.g., stack, heap); 
● Estado do process; PC; 
● Lista de arquivos abertos 
Thread: Uma thread, por outro lado, é uma unidade básica que representa a utilização de uma CPU. Uma thread é 
parte de um processo e, por sua vez, um processo pode possuir uma única ou múltiplas threads. Uma thread pode 
possuir atributos, tais como: 
● Número da thread; 
● PC; 
● Conjunto de registradores; 
● Memória Stack 
Por fim, uma thread divide alguns de seus recursos com outras threads. Alguns desses recursos são: 
● Seção de código da memória - variáveis globais; 
● Seção de texto da memória - variáveis globais; 
● Arquivos abertos; 
● Sinais 
 
● Qual a diferença entre processos CPU-bound e I/O-bound? Quais são os problemas que 
podem ocorrer caso o sistema tenha muitos processos CPU-bound ou muitos processos 
I/O-bound? 
 
Processos CPU-bound são aqueles que tendem a ser mais rápidos caso o desempenho da CPU seja bom, ou 
seja, são processos que utilizam a CPU na maior parte de seu tempo de execução. Um dos principais problemas 
com processos deste tipo é que os mesmos podem ter sua execução muito adiada caso a utilização de CPU seja 
extensa por processos com quantum menor de tempo. 
Analogamente, processos I/O-bound dependem mais das entradas e saídas do sistema e são mais eficientes 
quando um determinado dispositivo possui um bom desempenho. Um exemplo claro é a transferência de arquivos 
ao utilizar um disco rígido em comparação com o mesmo processo utilizando um SSD. Processos I/O-bound 
podem ter seus desempenhos afetados caso a velocidade de um dado dispositivo I/O seja muito mais lenta que o 
próprio tempo de execução em CPU. 
 
● Em sua opinião, qual foi a principal evolução de hardware e software que possibilitou o 
desenvolvimento dos Sistemas Operacionais que existem atualmente? Justifique sua 
resposta. 
 
A miniaturização da eletrônica com certeza contribuiu muito para que o hardware evoluísse de maquinários de 
grande porte e com alto índice de falha, para mainframes de tamanho reduzido, computadores pessoais de mesa, 
laptops e smartphones. A evolução de software esteve intimamente ligada à evolução do hardware, por muitas 
vezes até influenciando-a. Um exemplo claro disto é que os sistemas operacionais eram simples, tal qual o seu 
hardware, no início. Logo na sequência já era possível utilizar sistemas multiprogramados, usando terminais e 
máquinas virtuais, inspiradas na mudança de uso do hardware, bem como na mudança de comportamento dos 
programadores. Por fim, o advento das linguagens de alto nível (FORTRAN, C) impulsionou a escala na qual SOs 
poderiam operar, pela facilidade de codificação em relação ao código de máquina. 
 
● Diferencie algoritmos preemptivos de algoritmos não-preemptivos. 
 
Preemptivos: Os algoritmos preemptivos são utlizados quando um processo chaveia de seu estado "executando" 
para um estado de "pronto" ou "espera". Os recursos são alocados para este dado processo por uma quantidade 
de tempo (quantum) e depois são desalocados. Este processo é então levado novamente para a fila com estado 
"pronto" e permanece lá até que chegue sua vez de executar novamente. 
 
Não-preemptivos: Neste paradigma, uma vez que os recursos são alocados para um process, o mesmo mantém a 
CPU ocupada até a finalização de sua execução ou até que o mesmo entre em um estado de espera. 
 
Diferenças: 
● No escalonamento preemptivo a CPU é alocada para um dado processo por um tempo limitado, 
enquando na versão não-preemptiva a CPU é alocada para um dado processo até que sua execução 
termine ou até que o mesmo mude para um estado de espera. 
● A execução do processo no escalonamento preemptivo é interrompida caso um processo de 
prioridade maior entre na fila. No não-preemptivo o processo não é interrompido no meio de sua 
execução. 
● A quantidade de chaveamentos do estado "pronto" para o estado "executando" é geralmente muito 
grande em algoritmos preemptivos. O contrário acontece no não-preemptivo, não havendo uma 
grande carga nesse tipo de chaveamento. 
● No preemptivo, se um processo de alta prioridade aparece com frequência na fila de processos 
prontos,então o processo com a prioridade mais baixa deve ter um tempo de espera maior, podendo 
sofrer de inanição. De outro modo, no não-preemptivo, se a CPU for alocada para um processo que 
possui um tempo maior de execução, processos com o tempo menor podem também sofrer de 
inanição. 
 
● Dos algoritmos de escalonamento discutidos em sala de aula qual deles poderia ser 
modificado para acomodar alguns processos de tempo real (processos que devem ter 
uma resposta dentro de um certo período de tempo) misturados com os outros tipos de 
processo? Para aqueles algoritmos que você poderia modificar, explique como você faria 
isso. Para aqueles que isso não é possível, explique. 
 
No caso de um sistema de​ hard real time, ​hipoteticamente aplicado a um sistema embarcado, o qual lida com 
leitura e interpretação de sinais de sensores, imagino que o mais adequado seria utilizar um algoritmo similar ao 
FCFS, de modo que o mesmo atenderia precisamente as necessidades de tempo e confiabilidade de execução 
necessárias para um sistema do tipo. Uma possível modificação seria adicionar prioridade na fila dada a 
velocidade de medição dos sensores, ou ao tipo de job (e.g. leitura, processamento). Deste modo, o algoritmo 
chegaria até mais próximo a um escalonamento estático por prioridade. 
 
Para um sistema de ​soft real time​ um escalonamento dinâmico pode servir, uma vez que a sua requisição por 
deadlines é menor que no caso ​hard​. Neste cenário, um algoritmo Fair-Share Scheduling pode ser adotado, 
levando em conta não somente o tempo de CPU necessário, mas também informações adicionais sobre o tipo de 
processo, dispositivo associado, tempo restante e etc. 
 
 
● [OBJETIVA] Em um sistema operacional que utiliza o algoritmo de escalonamento 
Round-Robin, o escalonador retirou o primeiro processo da fila circular de processos e 
concedeu a CPU para a sua execução. Se tal processo não terminar a sua execução após 
certo quantum de tempo, 
 
Uma preempção ocorrerá, e o processo será inserido no fim da fila circular de processos. 
 
● Discorra sobre os sistemas interativos e sistemas batch e a relação deles com os 
algoritmos de escalonamento. 
 
A idéia do escalonamento em batch é que não haja mudança no tempo alocado durante a execução, i.e., um 
processo é escalonado para realizar um conjunto de operações as executará até que termine todas, sem 
interrupções. Por outro lado, no escalonamento interativo um novo processo pode ser lançado enquanto outro 
processo está em execução. 
 
Exemplos de algoritmos de batch: 
● First-Come, First-Served (FCFS) - Os processos são designados para a CPU na mesma ordem na 
qual eles fazem a requisição. Basicamente há uma única fila para processos lançados em estado 
"pronto para execução". Cada processo novo é enviado para o final da fila. 
● Shortest Job First (SJF) - Neste algoritmo, a prioridade de execução é maior quando o tempo de 
execução conhecido do process é menor. Com isto, processos com execução mais rápida são 
priorizados. 
Exemplos de algoritmos interativos: 
● Round-robin - Possui uma única fila na qual a prioridade é dada pela quanta de tempo de um dado 
processo. Caso o quantum (quantidade de tempo) do processo acabe durante sua execução, o 
mesmo é encaminhado para o final da fila e recebe novamente um quantum. 
● Priority scheduling - Neste, filas são formadas dadas as prioridades conhecidas dos processos. Assim, 
processos de uma fila 4 (mais prioritária), por exemplo, são executados primeiro que processos das 
filas 3, 2 e 1, respectivamente menos prioritárias. 
 
● [OBJETIVA] Em relação ao escalonamento implementado por um sistema operacional, 
analise as seguintes proposições. 
○ 1) No sistema conhecido como preemptivo, quem está com a CPU deve, 
voluntariamente, devolvê- la ao sistema operacional após o término de sua fatia de 
tempo. 
○ 2) Com o uso de interrupções em um hardware protegido, o sistema operacional 
pode definir por quanto tempo a CPU é cedida, pegando-a de volta quando esse 
tempo acabar. 
○ 3) No escalonamento conhecido como Time Sharing, o tempo de CPU é dividido 
entre ciclos CPU bound e I/O bound. Diz-se que o sistema é preemptivo quando ele 
possui muito mais do tipo CPU bound e poucos do tipo IO bound. Está(ão) 
correta(s), apenas: 
 
Apenas 2. 
 
● A maioria dos escalonadores Round-robin usa um quantum de tamanho fixo. O que pode 
acontecer se o quantum for muito pequeno? E se ele for muito grande? 
 
O princípio do Round Robin é que o tempo de CPU é dividido entre os processos, e nenhum deles obtém tempo 
maior que outros. 
 
Se o quantum for muito pequeno: O processo pode causar mudanças de contexto muito frequentes e, em sua 
maioria, desnecessárias. Esse efeito pode causar mais overheads, diminuindo a performance do sistema. 
 
Quantum muito grande: O tempo de resposta do processo pode ser muito grande, ocasionando menos tempo de 
resposta. Isto pode não ser adequado em um ambiente interativo. 
 
 
● [OBJETIVA] Os processos no sistema operacional que possuem um timer, chamado de 
quantum, onde todos os processos ganham o mesmo valor de quantum para rodarem na 
CPU, caracterizam o escalonamento de processos do tipo 
 
RR - Round-Robin. 
 
● [OBJETIVA] O algoritmo de escalonamento round-robin (RR) pode ser empregado nos 
sistemas operacionais com múltiplas filas de processos prontos. Nesse caso, pode ser 
usado tanto como algoritmo de escalonamento de determinadas filas, como também entre 
filas. Para o escalonamento entre filas, uma outra alternativa é utilizar um algoritmo 
preemptivo embasado em prioridades, nesse caso, cada fila pode ter uma prioridade. 
 
Verdadeiro. 
 
● Quais são outros mecanismos utilizados para permitir a correta comunicação entre 
processos em hosts distintos, como contraponto ao uso de semáforos e monitores? 
 
Espera ocupada: Na espera ocupada, o processo deve constantemente consultar o status de uma variável que 
indique uma mudança no uso da região crítica. Pode ser implementada de quatro modos: 
 
1. Desabilitar interrupções 
2. Variáveis de travamento (LOCK) 
3. Strict Alternation 
4. Solução de Peterson e Instrução TSL 
Primitivas Sleep/Wakeup: Duas primitivas são introduzidas nessa solução: sleep e wakeup. A chamada de sistema 
primitiva Sleep tem a função de bloquear o processo pelo qual foi chamada. Esse bloqueio fica ativo até que outro 
processo o acorde. Como esperado, a função Wakeup apenas acorda um processo antes bloqueado. Sistemas 
Produtor/Consumidor utilizam Sleep/Wakeup em sua implementação. 
 
Passagem de mensagens: Neste mecanismo, os processos se comunicam entre si sem abrir mão das variáveis 
compartilhadas. Se dois processos precisarem se comunicar, eles devem estabelecer um link de comunicação 
entre ambos e trocar mensagens por meio das funções send(destino, mensage) e receive(origem, mensagem). 
 
 
● Por que é importante sincronizar processos em um sistema? 
 
A sincronização de processos é um meio de coordenar diversos processos que utilizam dados compartilhados. 
Esta abordagem permite uma manutenção da consistência de dados compartilhados e processos cooperativos em 
execução. Uma inconsistência nos dados pode causar uma condição de corrida, i.e., quando uma ou mais 
operações acontecem ao mesmo tempo, não tendo sido escalonadas em uma sequência apropriada e que 
acabam por não serem removidas no tempo certo das regiões de acesso crítico. 
 
● Por que o uso de monitores é mais custoso que o uso de semáforos? 
 
O custo do uso de monitores e semáforos se traduz no tempo requerido para obter os travamentos necessários 
para cada vez que um recurso compartilhado é acessado. Dito isto, os monitores são abstrações de alto nível que 
permitem a sincronização de dois ou mais processos, enquanto os semáforos são soluções de baixo nível 
utilizadas para organizar a execução dos processos. Sendo uma solução de alto nível, os monitores tendem a ter 
uma performance atrelada a implementação e, logo,dependem de suas versões em cada linguagem. Outra 
desvantagem é que os monitores não estão presentes em todas as linguagens (e.g. não existem em C, porém 
existem em Java e em Python em alguma medida). 
 
● Como solucionar o problema de Race Conditions no contexto de um sistema operacional? 
 
De modo a evitar race conditions, algumas regras são propostas na literatura. Caso todas essas regras (ou 
requisitos) sejam atendidas, tem-se uma solução livre de race conditions: 
1. Dois processos não podem acessar simultaneamente a mesma região crítica: Exclusão mútua. 
2. Premissas quanto à velocidade e quantidade de CPUs não devem ser levadas em consideração. 
3. Processos que não estão na região crítica não podem bloquear outros processos. 
4. Nenhum processo pode esperar para sempre para entrar em sua região crítica. 
Como mencionado nas questões anteriores, a Exclusão mútua pode ser solucionada pelas seguintes abordagens: 
● Espera Ocupada 
● Primitivas Sleep/Wakeup 
● Semáforos 
● Monitores 
● Passagem de Mensagem 
 
● Monitores podem ser implementados com o uso de semáforos. Explique como isso pode 
ser feito. 
 
Uma implementação possível de um monitor utiliza um semáforo mutex (inicializado em 1) para controlar tanto o 
acesso ao monitor. Deste modo, para adentrar no monitor o processo deve realizar uma chamada wait(mutex), 
bem como uma chamada signal(mutex) deve ser utilizada para quando o processo sair do monitor. Um outro 
semáforo pode ser utilizado para sinalizar a suspensão de outros processos. Uma variável next_count pode ser 
usada, nesse caso, para contar a quantidade de processos a suspender. 
 
● Explique e diferencie os conceitos: Race Condition, Região Crítica e Exclusão Mútua. 
 
● Race condition: ocorre quando dois ou mais processos tentam interagir com um mesmo dado, ou uma 
mesma região de memória. O acesso simultâneo a um determinado dado pode gerar inconsistências 
caso esse dado seja alterado. Por exemplo, se uma thread 1 acessa a variável a = 0 e a altera para 1, 
uma thread 2 que tenha acessado a = 0 pode ter tido sua execução comprometida, uma vez que a 
mesma deveria ter aguardado a finalização do cálculo de a pela thread 1. 
● Região crítica: a execução de mais de uma thread para uma aplicação específica não 
necessariamente pode causar problemas. Os problemas acontecem (como mostrado no exemplo 
anterior) quando múltiplas threads tentam acessar os mesmos recursos. Assim, uma região crítica é 
um segmento de código onde estão presentes variáveis (também objetos e ponteiros) compartilhadas 
e que deve assim ser executada atomicamente. Isso implica que em um determinado momento da 
execução de um dado código, somente um processo ou thread pode ter acesso à aquela região 
crítica. 
● Exclusão mútua: a exclusão mútua tenta evitar a race condition bloqueando o acesso todos os outros 
processos a uma região crítica durante a execução de um único processo naquela região. Para tanto, 
algumas regras foram definidas na literatura para que essa exclusão seja efetiva: 
○ Dois processos não podem acessar simultaneamente uma região crítica (Exclusão mútua). 
○ Não podem ser levantadas premissas quanto a velocidade ou quantidade de CPUs. 
○ Processos sendo executados fora da região crítica não podem bloquear outros processos. 
○ Nenhum processo deve morrer de inanição enquanto aguarda a obtenção do acesso a sua 
região crítica. 
 
● O que são os semáforos? Como eles funcionam? 
 
Um semáforo é basicamente uma variável que permite a sincronização do acesso a regiões críticas ou mesmo a 
recursos (e.g. arquivos e bancos de dados). Ele utiliza operações atômicas wait e signal para realizar a 
sincronização. Os semáforos podem ser categorizados em dois tipos: 
● Semáforos de contagem: é usado para controlar o acesso a um recurso que tem diversas instâncias, 
sendo que seu valor de count é inteiro e não negativo. 
● Semáforo binário (mutex): ao contrário do semáforo de contagem, o count mutex pode ser somente 
dois valores (0 e 1). 
 
● [OBJETIVA] O conceito de semáforo foi proposto por Dijkstra e mostra, de forma simples, 
como implementar alguns mecanismos entre processos. Escolha a opção correta: 
 
Instrução down executada com valor 0 faz o processo entrar no estado de espera. 
 
● [OBJETIVA] Os semáforos são usados em programação concorrente para evitar que dois 
ou mais processos acessem sua seção crítica simultaneamente. Assim, os semáforos são 
usados para garantir 
 
a exclusão mútua, onde cada processo deverá sinalizar imediatamente antes e, imediatamente após, usar um 
recurso comum a ambos. 
 
● Como as primitivas sleep e wakeup resolvem problemas de acesso concorrente em 
regiões críticas? 
 
As primeiras tentativas de resolver o problema de race condition utilizavam espera ocupada, i.e., os processos 
ficavam em estado de espera até que fossem habilitados a utilizar uma região crítica. Este tipo de implementação 
não otimiza o uso de tempo de CPU e gera situações inesperadas (e.g. inanição). Para solucionar esse problema 
duas primitivas de bloqueio e desbloqueio de processos foram propostas: sleep e wakeup. 
● Sleep: bloqueia o processo chamador até que outro processo o acorde. 
● Wakeup: acorda determinado processo 
Ambas possuem dois parâmetros: o processo sendo manipulado e um endereço de memória para realizar a 
correspondência entre uma primitiva sleep com sua correspondente wakeup. 
Estas primitivas são usadas para resolver o problema do Produtor/Consumidor. Entretanto, seu uso nesse 
contexto pode ter um comportamento inesperado devido ao acesso irrestrito a variável count, o que pode ser 
resolvido com o uso de semáforos. 
 
 
 
● Uma boa solução de Exclusão Mútua deve satisfazer quais condições? Por que? 
 
Uma boa solução de exclusão mútua visa garantir que um processo não terá acesso à uma região crítica quando 
outro processo está utilizando essa região. Para tanto, quatro condições são propostas: 
1. Dois processos não podem estar simultaneamente em regiões críticas 
2. Nenhuma restrição deve ser feita com relação à CPU 
3. Processos que não estão em regiões críticas não podem bloquear outros processos que desejam 
utilizar regiões críticas 
4. Processos não podem esperar para sempre para acessarem regiões críticas. 
 
 
● Por que desabilitar interrupções pode não ser uma boa idéia para garantir exclusão 
mútua? Justifique sua resposta. 
 
Quando as interrupções são desabilitadas a CPU não realiza o chaveamento entre processos. Isso viola a 
condição 2: 
● Nenhuma restrição deve ser feita com relação à CPU 
Além disso, a desabilitação das interrupções não é uma solução segura, uma vez que um processo pode não 
habilitar suas interrupções novamente e, consequentemente, pode não ser finalizado. Isto viola a condição 4: 
● Processos não podem esperar para sempre para acessarem regiões críticas. 
 
 
● Um analista de TI analisou os processos e threads de um servidor de uma organização e 
durante a análise identificou que três processos estavam na lista de espera por um 
recurso compartilhado. Além disso, também identificou uma situação inusitada: um 
desses processos nunca conseguia executar sua região crítica e, por conta disso, nunca 
acessava o recurso compartilhado. Qual o nome da situação inusitada encontrada pelo 
analista? 
 
Starvation: Provavelmente um processo estava bloqueando o acesso ao recurso compartilhado, gerando o efeito 
de espera nos 3 processos na lista de espera e, na sequência, matando de inanição (​starvation​) um dos processos 
tentando executar sua região crítica. 
 
 
● [OBJETIVA] A threads são unidades básicas de utilização de CPU, sendo importante para 
compartilhar recursos do sistema, bem como para melhorar a execução das aplicações. 
Analise as afirmações a seguir e escolha a alternativa correta. 
 
Threads possibilitam reduzir a alocação de recursos do sistema, além de diminuir o overhead na criação, troca e 
eliminação de processos.● No que diz respeito à implementação, qual a diferença entre threads de usuário (user-level 
threads) e threads de kernel (kernel-level threads)? 
 
As ​threads de usuário​ permitem criar processos que fazem seu próprio escalonamento de threads. Nesse caso, as 
threads são executadas no tempo de execução do seu processo pai, uma vez que a kernel não tem acesso a 
tabela de threads e não pode realizar esse tipo de escalonamento. 
Por outro lado, as threads de kernel possuem tanto tabela de processos quanto de threads, o que permite o 
escalonamento de threads pelo SO e executando threads alternantes entre os processos. 
 
 
● O custo (e consequentemente o tempo) de criação de uma thread (seja ela uma thread de 
usuário ou uma thread de kernel) é menor que o custo de criação de um processo. Por 
quê? 
 
Threads possuem menos pontos de gerenciamento quando comparadas aos processos. As threads não possuem 
recursos próprios enquanto o processo possui. 
 
● [OBJETIVA] Deadlock é um dos problemas relacionados ao gerenciamento de recursos 
em um SO. Esse problema, pode ocorrer por exemplo em um banco de dados. É sabido 
que gerenciar o deadlock pode ser uma tarefa custosa para o processador, de modo que 
os SOs em geral não tratam desse problema. Em alguns sistemas críticos, entretanto, 
tratar os deadlocks é uma tarefa importante. Qual entre as formas de tratamento a seguir 
se baseia em retirar o recurso do processo? 
 
Por meio de preempção. 
 
● Um sistema tem dois processos e três recursos idênticos. Cada processo precisa de no 
máximo dois recursos. É possível ocorrer deadlock? Justifique a sua resposta. 
 
Sim, é possível ocorrer deadlock. Inclusive essa configuração se parece muito com o jantar dos filósofos [1], o qual 
pode ser resolvido aplicando-se um semáforo para controlar o uso de recursos. 
[1] ​https://blog.pantuza.com/artigos/o-jantar-dos-filosofos-problema-de-sincronizacao-em-sistemas-operacionais 
 
● [OBJETIVA] Uma das causas de deadlocks em sistemas operacionais é a disputa por 
recursos do sistema que podem ser usados apenas por um processo de cada vez. 
 
https://blog.pantuza.com/artigos/o-jantar-dos-filosofos-problema-de-sincronizacao-em-sistemas-operacionais
Verdadeiro. 
 
● Cite e descreva quatro estratégias para tratamento de deadlocks. 
 
Exclusão mútua (e.g. Semáforos) - Definir uma variável de semáforo para o uso de recursos compartilhados. 
Algoritmo do banqueiro - Garante uma linha de crédito para utilização dos recursos. Essa linha de crédito é 
dimensionada tomando como premissa que nem todos os clientes (processos) precisam de toda a linha de crédito 
(recursos) disponível para ele. Esta solução pode ser implementada para um único ou múltiplos tipos de recursos. 
É pouca utilizada pois pode ter um custo elevado para o sistema. 
Uso e espera - Quando o processo necessitar de um recurso adicional o mesmo deve liberar todos os recursos em 
utilização e realizar uma nova requisição para todos novamente 
Espera circular - Ordena numericamente os recursos, de modo que a requisição a eles só pode ser em ordem 
crescente. É ineficiente, porém costuma ser a mais praticada. 
 
SOs de propósito geral utilizam o algoritmo do avestruz (ignorar os impasses por eles serem considerados raros). 
 
 
● [OBJETIVA] Sobre o gerenciamento de memória de um computador é correto afirmar que 
ele é realizado por hardware específico, e não por software. 
 
Falso. 
 
● Em que situações ocorrem faltas de páginas? Descreva sucintamente quais as ações 
realizadas pelo sistema operacional quando uma falta de página ocorre. 
 
Faltas de páginas ocorrem quando um programa tenta acessar dados ou código que estão em um endereço, 
porém o mesmo não se encontra alocado em memória. Quanto isto acontece, o SO toma a ação de tentar tornar a 
página requisitada acessível em um espaço da memória física, ou termina o programa no caso de acesso ilegal à 
memória. 
 
● Discuta como funcionam os processos de particionamento fixo e particionamento variável 
na memória principal. 
 
● Particionamento fixo: No particionamento fixo a memória é dividida em partições de tamanhos fixos 
com tamanhos iguais ou variáveis. Quando um programa é carregado ele entra em uma fila de 
processos para utilizar uma dada partição livre. O número de partições determina o número máximo 
de processos concorrentes. 
○ Exemplo: 
■ Particionamento de uma máquina com 32 KBytes de memória 
■ 4KBytes: processos pequenos 
■ 6KBytes: processos médios 
■ 12KBytes: processos grandes 
■ 10KBytes: kernel 
○ Limitação: O tamanho do processo a ser carregado pode não ser equivalente ao tamanho 
da partição, podendo levar a fragmentação interna. Para diminuir essa fragmentação 
geralmente adota-se diversas partições com tamanhos variados, porém fixos. 
○ Particionamento variável: No caso desta abordagem a fragmentação é externa, i.e., a 
memória externa a todos os processos é fragmentada. A mesma pode ser resolvida por 
meio da compactação de processos, movendo-os para espaços adjacentes, o que permite 
agrupar áreas livres. Os principais algoritmos de alocação nesta abordagem são: 
■ Best-fit 
■ First-fit 
■ Next-fit 
■ Worst-fit 
 
● Exemplifique com um exemplo a diferença entre a estratégia de partição fixa da estratégia 
de partição variável. Cite quais são as vantagens e desvantagens de cada estratégia. 
 
Partição fixa: 
● Vantagens 
○ Fácil de implementar: Os algoritmos de alocação nessa abordagem somente requerem a 
alocação de processos em uma determinada partição. 
○ Baixo overhead do SO: Processar partições fixas requer menos exceções e poder 
computacional. 
● Desvantagens 
○ Fragmentação interna 
○ Limitação no tamanho dos processos 
○ Limitação nos graus de liberdade da multiprogramação 
Partição variável: 
● Vantagens 
○ Sem fragmentação interna 
○ Sem restrições quantos aos graus de liberadade da multiprogramação 
○ Sem limitações quanto ao tamanho dos processos. 
● Desvantagens 
○ Implementação difĩcil 
○ Fragmentação externa 
 
 
● Qual a diferença entre espaço de endereçamento lógico (virtual) e espaço de 
endereçamento físico (real)? 
 
A principal diferença é que a memória física diz respeito a memória RAM do dispositivo, enquanto a memória 
virtual é uma abstração de gerenciamento que permite que os usuários executem programos maiores do que a 
própria memória física. 
 
 
Memória Física Memória Virtual 
Memória RAM do dispositivo Abstração que permite o gerenciamento de memória e dá a ilusão de 
uma memória física maior 
Rápida Lenta 
Utiliza SWAPING Utiliza paginação 
Tamanho limitado pelo 
hardware da RAM 
Tamanho limitado pelo hardware do Disco 
Possui acesso direto a CPU Não possui acesso direto a CPU 
 
 
 
 
● Quando a memória virtual é implementada em um sistema de computação, ela incorre em 
certos custos e benefícios. Liste alguns esses custos e benefícios. 
 
Benefícios 
● A implementação de paginação flexibiliza o gerenciamento de memória feito pelo SO 
○ Os programas podem rodar mesmo em situações de page fault ou para páginas que não 
consomem memória real. 
● Melhora a utilização de multiprogramação 
● O tamanho dos programas não é limitado pela memória principal 
Custos 
● Não é possível estimar com precisão a quantidade de memória a ser alocada para um programa 
dividido em páginas 
● A busca de páginas sob demanda pode forçar o aplicativo a bloquear E/S em muitas de suas 
referências. 
 
● [OBJETIVA] Em relação ao gerenciamento de memória em sistemas operacionais, 
assinale a alternativa que julgar correta. 
 
O espaço de endereçamento virtual disponível para os processos pode ser maior que a memória física disponível. 
 
● [OBJETIVA] Memória virtual é um espaço reservado pelo disco rígido que funciona como 
a memória RAM quando esta se esgota. Tal espaço é denominado arquivo de paginação, e 
o mecanismo funciona como uma forma de estender a quantidade de memória para dados 
temporários utilizadospelos aplicativos em execução 
 
Verdadeiro. 
 
● O que é a MMU e qual sua importância para o sistema operacional? 
 
A ​Memory Allocation Unit ​é o componente de hardware que realiza o mapeamento dos endereços lógicos para os 
endereços físicos, além de realizar o SWAP. 
 
● Discuta qual a influência que o tamanho da página tem no gerenciamento de memória. 
 
Páginas grandes: 
● Leitura mais eficiente 
● Menor fragmentação interna 
Páginas pequenas: 
● Leitura menos eficiente 
● Maior fragmentação interna. 
 
● [OBJETIVA] No contexto de um sistema operacional, quando este faz uso de memória 
virtual, podemos dizem que as páginas e as molduras de páginas apresentam sempre o 
mesmo tamanho. 
 
Verdadeiro. 
 
● [OBJETIVA] Qual dos algoritmos abaixo é semelhante ao algoritmo de substituição de 
páginas , porém tendo como vantagem de permitir que páginas que estejam sendo 
utilizadas possam continuar na memória, evitando excesso de paginação. 
 
Segunda Chance (SC). 
 
● [OBJETIVA] A memória virtual pode ser gerenciada por segmentação. O gerenciamento 
por segmentação é uma técnica na qual: 
 
Os programas são divididos em segmentos de tamanhos variados, cada um com seu próprio espaço de 
endereçamento. 
 
● Descreve o funcionamento do algoritmo Aging e como ele resolve o problema 
apresentado pelo algoritmo NFU. 
 
No NFU, cada página contém um contador inicializado em 0. A cada ciclo de clock, os contadores das páginas 
referenciadas neste ciclo são incrementados em 1. Assim, o contador mantém um histórico das páginas mais 
requisitadas, escolhendo as páginas com contagem mais baixa para swap, quando necessário. O principal 
problema dessa abordagem é seu histórico frequentista, não levando em consideração o tempo despendido para 
executar cada tarefa. Isto pode fazer com que tarefas com um tempo de execução muito longo (geralmente 
complexas), porém com pouca frequência de execução sejam despriorizadas em detrimento de tarefas rápidas, 
pouco complexas e muito frequentes. 
 
Para evitar esse problema, uma modificação do NFU foi proposta e denominada Aging. Este algoritmo leva em 
consideração o tempo despendido por cada tarefa e, ao invés de apenas incrementar um contador de referência, o 
contador é inicialmente deslocado (shift) para a direita antes da adição do bit de referência à esquerda deste 
número binário. Deste modo, além de saber quantas vezes a página foi referenciada, também é possível saber 
quando a mesma foi referenciada. 
 
 
● [OBJETIVAS] Uma técnica de memória virtual na qual o espaço de endereçamento virtual 
e o espaço de endereçamento real são divididos em blocos de mesmo tamanho 
denomina-se: 
 
Paginação. 
 
● Em que situações ocorrem faltas de páginas? Descreva sucintamente quais as ações 
realizadas pelo sistema operacional quando uma falta de página ocorre. 
 
Uma falta de página ocorre quando um programa tenta acessar dados ou código no espaço de endereçamento, 
porém sem que esse endereço esteja referenciado na memória principal. Nesses casos, as ações realizadas pelo 
sistema operacional são as seguintes: 
 
● O hardware aciona a rotina TRAP para o kernel e o salva o PC na stack. 
● O estado da instrução atual é salvo nos registradores do CPU 
● O SO tenta encontrar qual página é necessária, buscando nos registradores. Caso não encontre, o 
SO retorna o PC e tenta definir qual instrução estava sendo executada quando a falta de página 
ocorreu. 
● Quando o endereço que causou a falta de página é encontrado o SO verifica se esse endereço é 
válido e se não há restrição de acesso ao mesmo. 
● Se o endereço virtual é válido, o SO verifica se existe espaço livre para a página. Caso não haja, o 
algoritmo de substituição é acionado para remover uma página. 
● Uma vez que há espaço disponível, o SO recupera a página do disco. 
● O SO recupera a instrução que estava sendo executada quando a falta de página ocorreu, retornando 
a execução normalmente. 
 
● [OBJETIVA] Drivers são rotinas do sistema operacional que tem como função se 
comunicar com os dispositivos de Entrada/Saída em nível de hardware, são softwares 
tradutores que recebem comandos do sistema operacional para um hardware específico. 
 
Verdadeiro. 
 
● Explique como funciona o processo de entrada/saída programada. 
 
A E/S programada é o tipo mais simples de técnica de E/S para transferir dados por meio da comunicação entre o 
processador e os dispositivos externos (passando pelo módulo de E/S). O processador executa um programa que 
dá acesso direto ao controle da operação de E/S, incluindo obtenção do status do dispositivo, mensagens de 
escrita e leitura e transferência de dados. O processador entra em estado de espera após enviar uma mensagem 
ao módulo I/O. Em resumo, podemos definir os seguintes mecanismos para o funcionamento da E/S programada: 
 
● O processador está executando um programa e encontra uma instrução relacionada a uma operação 
de E/S; 
● Então, o processador executa essa instrução por meio de um comando enviado ao módulo de E/S; 
● O módulo de E/S, por sua vez, irá desempenhar o comando solicitado pelo processador e instanciará 
bits de controle nos registradores, permitindo acompanhamento de status. 
● O processador periodicamente verificará se a operação de E/S foi finalizada. 
 
● Como funciona a técnica de acesso direto a memória (DMA) e quais suas vantagens? 
 
Ao contrário da E/S programada, a DMA é uma técnica de transferência de dados q qual atua diretamente entre a 
memória principal e o dispositivo externo, sem passar pelo processador. Quando o processador necessita realizar 
operações de escrita e leitura de dados o mesmo aciona o módulo DMA. A requisição ao DMA pode conter 
informações como: 
 
● Comandos de leitura e escrita; 
● Quantidade de palavras a serem escritas ou lidas; 
● Endereços da memória onde ocorrerão essas operações; 
● Endereço do dispositivo de E/S a ser acionado. 
Após o envio destas informações o processador continua sua execução normalmente, sem a necessidade de 
espera como na E/S programada. Concomitantemente, o módulo de DMA transfere os dados diretamente para a 
memória, e da memória para o dispositivo de E/S. Ao final da operação, o módulo DMA envia um sinal de 
interrupção ao processador avisando a finalização do uso do barramento. 
 
Vantagens: 
● Permite que os dispositivos leiam e escrevam na memória sem precisar passar pelo CPU; 
● Por conta disso, há um aumento de desempenho de processamento, uma vez que o CPU pode 
continuar executando outros comandos enquanto os dados provenientes da E/S são carregados em 
memória. 
Desvantagens: 
● Exige que o controlador do DMA tome conta de toda a operação, aumentando a complexidade e custo 
do sistema; 
● Podem ocorrer problemas com a coerência de cache. 
 
● [OBJETIVA] Sobre os dispositivos de entrada e saída (E/S) em sistemas operacionais, 
podemos afirmar que: 
 
tudo o que os sistemas operacionais visualizam é a interface do controlador, que pode ser muito diferente da 
interface para o dispositivo. 
 
● [OBJETIVA] O controle dos dispositivos de entrada e/ou saída de um dispositivo 
computacional, de modo que seja possível interagir com eles, é feito por: 
 
Drivers. 
 
● [OBJETIVA] Em relação aos drivers podemos afirmar que 
 
Controlam o funcionamento dos dispositivos por meio de seqüência de comandos escritos/lidos nos/dos 
registradores da controladora. 
 
● Um pedido de interrupção (IRQ) é a forma pela qual componentes de hardware requisitam 
tempo computacional da CPU. Um IRQ é a sinalização de um pedido de interrupção de 
hardware. Por que as interrupções são fundamentais em um sistema operacional? 
 
Um pedido de interrupção(IRQ) é o modo que as placas tem de avisar ao processador de que precisam de 
atenção. A importância da utilização deste tipo de interrupção reside no uso compartilhado e paralelo de diversos 
dispositivos (16 IRQs disponíveis), tais como: 
 
● IRQ 0 - Cronômetro do Sistema 
● IRQ1 -Teclado (quando o buffer está cheio) 
● IRQ 2 - O próprio controlador de interrupções 
● IRQ 6 - Controladora de disco flexível 
● IRQ 8 - CMOS do sistema/relógio de tempo real 
● IRQ 9 - Usada pelo sistema 
● IRQ 13 - Processador de dados numérico 
● IRQ 14 - Controlador primário de disco rígido 
 
● Quais os objetivos de um software de E/S? 
 
● Independência de dispositivo 
● Denominação uniforme 
● Manipulação de erros 
● Separar transferências síncronas das assíncronas 
● Armazenamento intermediário 
● Separar dispositivos dedicados dos compartilhados 
 
● As solicitações de disco chegam para o driver de disco na seguinte ordem: 10, 22, 20, 2, 
40, 6 e 38. Uma busca leva 6 msec por cilindro movido. Quanto tempo de busca é 
necessário para: 
○ FCFS; 
○ SSF; 
○ Elevator. 
○ Posição inicial do braço do disco: cilindro 20. Elevador para a direita. 
 
FCFS 
20 (inicial): 
10: (10 x 6 = +60 ms) 
22: (12 x 6 = +72 ms) 
20: (2 x 6 = +12 ms) 
2: (18 x 6 = +108 ms) 
40: (38 x 6 = +228 ms) 
6: (34 x 6 = +204 ms) 
38: (32 x 6 = +192 ms) 
Total = 876 ms 
 
SSF 
20 (inicial): 
20: (0 x 6 = +0 ms) 
22: (2 x 6 = +12 ms) 
10: (12 x 6 = +72 ms) 
6: (4 x 6 = +24 ms) 
2: (4 x 6 = +24 ms) 
38: (36 x 6 = +210 ms) 
40: (2 x 6 = +12 ms) 
Total = 360 ms 
 
Elevator 
20 (inicial): 
20 (0 x 6 = +0 ms) 
22 (2 x 6 = +12 ms) 
38 (16 x 6 = +96 ms) 
40 (2 x 6 = +12 ms) 
10 (30 x 6 = + 180 ms) 
6 (4 x 6 = + 24 ms) 
2 (4 x 6 = + 24 ms) 
Total: 348 ms 
 
 
● A técnica mais utilizada para reduzir o acesso ao disco é a cache de buffer. Descreva 
sobre esta técnica e apresente algumas vantagens de sua utilização. 
 
A cache do buffer é a memória principal (i.e. RAM) sendo utilizada como memória cache para reduzir o número de 
acessos físicos (read/writes) a dispositivos de alta capacidade de armazenamento (e.g. HDs), uma vez que estas 
operações são muito mais lentas que as realizadas na memória principal. Por fim, a cache do buffer é somente um 
dos diversos tipos de cache utilizados para reduzir a quantidade de operações lentas. 
 
● [OBJETIVA] É sabido que o uso do DMA ajudar a reduzir o número de interrupções, pois 
usa hardware dedicado, porém em alguns casos pode ser mais vantajoso um sistema de 
E/S orientado a interrupção. 
 
Verdadeiro. 
 
● Quais as vantagens e desvantagens no uso de relógios de hardware e de software? 
 
Resposta vazia. 
 
● [OBJETIVA] O sistema operacional organiza os arquivos por meio de diretórios. Assinale 
a opção correta, referente às características dos arquivos e diretórios do tipo ACL (access 
control list). Escolha uma: 
 
A ACL oferece uma lista associada a cada arquivo que informa que usuário específico e quais tipos de acessos 
são permitidos. 
 
● [OBJETIVA] O gerenciamento de armazenamento auxiliar de um sistema de arquivos é 
responsável por garantir que as informações armazenadas em um arquivo não sejam 
corrompidas. 
 
Falso. 
 
● Quais as vantagens e desvantagens de se organizar um sistema de arquivo em um único 
nível e em vários níveis? 
 
A principal vantagem da estrutura de arquivos em nível único é a sua simplicidade, o que torna a implementação 
mais simples. Por outro lado, não permite a criação de arquivos com o mesmo nome. 
 
A estrutura de diretórios em árvore, i.e. multinível, é o modelo mais utilizado hoje em dia em quase todos os 
sistemas operacionais, tornando um sistema mais estudado e estável. Porém, cada usuário pode criar vários 
níveis de diretórios, sendo que cada um pode conter arquivos e subdiretórios, aumentando a complexidade de 
busca. 
 
● [OBJETIVA] Em um sistema de arquivos organizado como uma árvore de diretórios, o 
caminho absoluto consiste na sequência de diretórios entre o diretório raiz e o arquivo. 
 
Verdadeiro. 
 
● Como funciona a FAT (File-Allocation Table) usado pelo MS-DOS, qual a diferença em 
relação à alocação por encadeamento simples? 
 
● A FAT cria e utiliza uma tabela de alocação de arquivos alocada em uma seção do disco no inicio de 
cada partição. 
● A FAT indexa para entrada um bloco do disco. 
● A entrada da tabela, indexada pela entrada do arquivo no diretório, contém o número do bloco do 
próximo bloco no arquivo. 
● Continua até o bloco que contém o identificador de fim de arquivo. 
● Ao contrário da alocação por encadeamento a FAT não utiliza um espaço em cada bloco do disco 
como ponteiro (utiliza os blocos com valor igual a zero na tabela que representam blocos livres). 
 
● Como funciona a alocação de espaço por encadeamento (linked allocation). Quais os 
problemas apresentados por este método? 
 
Na alocação de espaço por encadeamento (linked allocation) cada arquivo é representado por uma lista 
encadeada de blocos, os quais podem ser espalhados no disco. Devido a essa configuração essa abordagem 
possui pouca perda de espaço, com o drawback de não tem acesso direto e uma busca deve percorrer a lista. 
 
Adicionalmente, cada diretório possui um ponteiro para o primeiro e para o último bloco de cada arquivo, bem 
como cada bloco possui um ponteiro para o próximo bloco. Tem como característica positiva não gerar 
fragmentação externa. 
 
Alguns dos problemas apresentados pelo linked allocation incluem: 
● Só pode ser efetivamente adotado para arquivos de acesso sequencial. 
● Há uma pequena perda de espaço devido a alocação dos ponteiros. 
● Há uma preocupação quanto a integridade e confiabilidade dos arquivos, uma vez que os ponteiros 
são armazenados em disco e, se corrompidos, podem causar falhas graves no sistema. 
 
● Um dos pontos mais importantes na implementação do armazenamento de arquivos é a 
manutenção de quais blocos de discos estão relacionados as quais arquivos. Dentre os 
métodos existentes destaca-se a alocação contígua. Discuta algumas características 
deste método. 
 
A alocação de espaço contígua requer que cada arquivo ocupe um conjunto de blocos contíguos no disco. Os 
endereços de disco definem um ordenamento linear no disco. Com isso, o número de operações de busca no 
disco, exigidos para acesso a arquivos alocados contiguamente é mínimo, assim como o tempo de busca, quando 
necessária. 
 
Algumas das limitações dessa abordagem são: 
● Dificuldade de encontrar espaço para um novo arquivo: sistemas de gerenciamento de espaço livre 
devem ser utilizados para realizar esta operação, mas tais sistemas geram fragmentação externa;. 
● Dificuldade de determinar a quantidade de espaço necessário para um arquivo: pela falta de 
conhecimento na hora da criação do arquivo, ou para futura ampliação do mesmo. Em geral, o espaço 
necessário é superestimado, gerando assim fragmentação interna. 
 
● O que são i-nodes? 
 
O primeiro bloco encontrado quando se faz o acesso a um arquivo é denominado i-node . 
● É uma estrutura de dados que relaciona os atributos com os endereços em disco dos blocos do 
arquivo. 
● Um mecanismo de alocação indexado é adotado para o bloco de índice. 
● Em geral utiliza -se um esquema onde os 12 primeiros ponteiros apontam para blocos diretos, ou seja, 
que contém dados do arquivo; os outros 3 ponteiros apontam para blocos indiretos. 
○ O primeiro ponteiro para um bloco indireto é o endereço de um bloco indireto simples (um 
bloco de índices que não contém dados, mas endereços de blocos que contêm dados). 
○ Depois existe um ponteiro para um bloco indireto duplo (contém o endereço de um bloco 
que contém os endereços de blocos que contêm ponteiros para os blocos de dados reais). 
○ O último ponteiro contém o endereço de um bloco indireto triplo. 
 
● A criação de arquivos em disco exige que o sistema operacional tenha controle de quais 
áreas ou blocos no disco estão livre. Cite três estruturas de dados que armazenam 
informações que possibilitam ao sistema gerenciar o espaço livre do disco 
 
A criação de arquivos geralmente fica a cargo de uma lista ou tabela, na qual é possível identificar blocos livres 
que poderão ser alocadospor um novo arquivo. Trẽs estruturas podem ser citadas: 
 
● Mapa de bits 
● Lista encadeada de blocos livres no disco 
● Tabela de blocos livres 
 
● [OBJETIVA] Nos sistemas de arquivos que utilizam i-nodes, os atributos de cada arquivo 
estão armazenados nas entradas do diretório. 
 
Falso. 
 
● [OBJETIVA] Uma cache de disco pode ser definida como parte da memória RAM ou 
memória buffer cache, utilizada para acelerar o acesso aos dados que estão sendo mais 
frequentemente requisitados. Assinale a alternativa correta. 
 
A cache de disco pode ser implementado de duas formas principais: através da memória RAM inserida no 
próprio disco rígido e utilizando-se da própria memória RAM do computador. 
 
● Discuta as estratégias comuns para a realização de backups nos sistemas de arquivos. 
 
As cópias mantidas como medida de segurança contra possíveis perdas (e.g. desastres naturais, invasões) é 
denominada backup. Os backups geralmente são manuais ou automáticos (agendado). Apesar de necessários 
para gestão de risco, os backups costumam demorar para serem feitos, bem como ter um alto custo de 
armazenamento dado a sua ocupação de espaço. Algumas estratégias utilizadas para backup são: 
 
● Física: Copia todos os blocos, estes blocos estando ou não populados com arquivos: 
○ Apesar de ser simples e rápida, muito espaço é desperdiçado com a inclusão de blocos 
não utilizados. Além disso, é suscetível a copia de blocos defeituosos. 
● Lógica: Copia somente diretório específicos, atualizando-os quando modificados. 
○ É a forma de backup mais adotada. Sua principal limitação é a necessidade de recriação 
dos blocos vazios não copiados durante a restauração.

Outros materiais