Baixe o app para aproveitar ainda mais
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.
Compartilhar